上次我們介紹了MQTT發送arduino傳進來的資料,今天要來介紹現在常用的json格式
首先先說json是什麼,json是一種資料儲存格式,再網頁中常常使用的一種格式
而json格式在儲存的時候會有key跟value
以下面的程式為例
{
"CO2":431
"VTOC":5
}
其中 key是CO2和VTOC,value是431 跟 5
要注意的是 json 前後需要大括號框住 然後KEY跟value要用雙引號包者 但如果是一個數字 就不需要雙引號
在將arduino的資料包成json的時候 有兩種方法 一種是在傳送資料前就先包成json
另一種是 資料送進來在包成json
今天要介紹比較簡單的,在傳送前包成JSON格式
char data;
#include "Adafruit_CCS811.h"
Adafruit_CCS811 ccs;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
ccs.begin();
delay(1000);
while(!ccs.available());
}
void loop() {
while(Serial.available()>0){
data = Serial.read();
if(data == 'g'){
if(ccs.available()){
if(!ccs.readData()){
Serial.print("{\"CO2\":");
Serial.print(ccs.geteCO2());
Serial.print(",");
Serial.print("\"TVOC\":");
Serial.print(ccs.getTVOC());
Serial.print("}\n");
}
}
}
}
}
這樣就把資料包成JSON了,不過要注意如果要印出雙引號 需要使用跳脫字元
什麼是跳脫字元 引用wiki的一句話:(在C語言中 用反斜線字元「\」作為跳脫字元,來表示那些不可列印的ASCII控制符) 意思是在c語言中 雙引號代表字串 所以只要打雙引號 程式就會自動判斷為你要字串所以無法print出來 這時就需要跳脫字元來表達說我要印出雙引號
回歸到程式,我們看輸出的結果
這樣成功的輸出JSON格式的資料了
然後把JSON格式解析之後就可以利用KEY去尋找資料,也可以只印出值
Arduno_data = JSON.parse(line);
console.log(Arduno_data)
Sensor_data = Object.values(Arduno_data)
console.log(Sensor_data)
這樣子做的好處是 如果今天資料量很大時 或是我只需要特定KEY的值的時候
我們可以利用KEY去搜尋我們需要的資料.
明天要來介紹MONGODB 一個利用JSON格式除存資料的資料庫